package ia.robot.gui;

import java.awt.event.ActionListener;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

/**
 * Clase que representa el menu del marco principal.
 * 
 * @author Jaime A. Corrales Gonzalez
 * @author Alejandro Tejera Perez
 */
public class MainMenu extends JMenuBar {

	private static final long serialVersionUID = 1L;

	public static final String fileString = "File";
	public static final String newString = "New";
	public static final String loadString = "Load";
	public static final String saveString = "Save";
	public static final String exportString = "Export";
	public static final String quitString = "Quit";

	private JMenuItem newMenuItem;
	private JMenuItem loadMenuItem;
	private JMenuItem saveMenuItem;
	private JMenuItem exportMenuItem;
	private JMenuItem quitMenuItem;

	private JMenu fileMenu;

	/**
	 * Constructor por defecto.
	 */
	public MainMenu() {
		fileMenu = new JMenu(fileString);

		newMenuItem = new JMenuItem(newString);
		fileMenu.add(newMenuItem);

		fileMenu.addSeparator();

		loadMenuItem = new JMenuItem(loadString);
		fileMenu.add(loadMenuItem);

		saveMenuItem = new JMenuItem(saveString);
		fileMenu.add(saveMenuItem);

		fileMenu.addSeparator();
		
		exportMenuItem = new JMenuItem(exportString);
		fileMenu.add(exportMenuItem);
		
		fileMenu.addSeparator();

		quitMenuItem = new JMenuItem(quitString);
		fileMenu.add(quitMenuItem);

		this.add(fileMenu);
	}

	/**
	 * Metodo que asocia un escuchador de eventos a componentes del menu.
	 * 
	 * @param l
	 *            - Escuchador de eventos.
	 */
	public void addMenuListener(ActionListener l) {
		newMenuItem.addActionListener(l);
		loadMenuItem.addActionListener(l);
		saveMenuItem.addActionListener(l);
		exportMenuItem.addActionListener(l);
		quitMenuItem.addActionListener(l);
	}

	/**
	 * Metodo para bloquear el menu al ejecutar una estrategia de busqueda.
	 */
	public synchronized void lockMainMenu() {
		fileMenu.setEnabled(false);
	}

	/**
	 * Metodo para desbloquear el menu al terminar la ejecucion de una
	 * estrategia de busqueda.
	 */
	public synchronized void unlockMainMenu() {
		fileMenu.setEnabled(true);
	}
}
